﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tibet.GUI.Contrato;
using Tibet.Entidades;
using Tibet.Logica.Comandos;
using Tibet.Logica.FabricaLogica;
using System.Web.UI.WebControls;
using Tibet.Entidades.FabricaEntidades;
using Tibet.Logica.Comandos.ComandoAdministracionProyecto;
using Entidades;
using System.Web.UI.HtmlControls;
using System.Windows.Forms;

namespace Tibet.GUI.Presentador
{
    public class PresentadorCrearProyecto
    {
        private IContratoCrearProyecto _contratoCrearProyecto;
        List<Entidad> listaclientes = new List<Entidad>();
        List<Entidad> listametricas = new List<Entidad>();
        List<Entidad> listareglas = new List<Entidad>();
        List<Entidad> listadesarrolladores = new List<Entidad>();
        List<Entidad> listaroles = new List<Entidad>();
        List<Entidad> listaIntegrantes = new List<Entidad>();


        #region Constructor
        /// <summary>
        /// Constructor de la clase PresentadorCrearPerfilMetrica
        /// </summary>
        /// <param name="IContratoCrearPerfilMetrica"></param>
        public PresentadorCrearProyecto(IContratoCrearProyecto contrato)
        {

            _contratoCrearProyecto = contrato;
        }
        #endregion
        
        #region metodos

        public void MostrarClientes()
        {

            Comando consultarcliente = FabricaComandoProyecto.ObtenerComandoConsultarClientes();
            consultarcliente.Ejecutar();

            listaclientes = consultarcliente.ListaEntidad;

            // _contratoCrearProyecto.clientes.Items.Add("--Seleccione una opción--");

            if (listaclientes != null)
            {
                _contratoCrearProyecto.clientes.Controls.Clear();
                for (int i = 0; i < listaclientes.Count; i++)
                {

                    _contratoCrearProyecto.clientes.Items.Add((listaclientes.ElementAt(i) as Cliente).Nombre);


                }

                _contratoCrearProyecto.clientes.DataBind();


            }

        }


        public void MostrarMetricas()
        {

            Comando consultarmetricas = FabricaComandoMetrica.ObtenerComandoConsultarPerfilMetrica();
            consultarmetricas.Ejecutar();

            listametricas = consultarmetricas.ListaEntidad;


            if (listametricas != null)
            {
                _contratoCrearProyecto.metricas.Controls.Clear();
                _contratoCrearProyecto.metricas.Items.Add("--Seleccione una opción--");

                for (int i = 0; i < listametricas.Count; i++)
                {

                    _contratoCrearProyecto.metricas.Items.Add((listametricas.ElementAt(i) as PerfilMetrica).NombrePerfilMetrica);
                    //     _contratoCrearProyecto.metricas.Items.Add((listametricas.ElementAt(i) as PerfilMetrica).IdPerfilMetrica.ToString());

                }

                _contratoCrearProyecto.metricas.DataBind();


            }

        }

        public void MostrarReglas()
        {

            Comando consultarreglas = FabricaComandoProyecto.ObtenerComandoConsultarPerfilReglas();
            consultarreglas.Ejecutar();

            listareglas = consultarreglas.ListaEntidad;


            if (listareglas != null)
            {
                _contratoCrearProyecto.reglas.Controls.Clear();
                _contratoCrearProyecto.reglas.Items.Add("--Seleccione una opción--");

                for (int i = 0; i < listareglas.Count; i++)
                {

                    _contratoCrearProyecto.reglas.Items.Add((listareglas.ElementAt(i) as Perfil_Regla).NombrePerfilRegla);
                    // _contratoCrearProyecto.reglas.Items.Add((listareglas.ElementAt(i) as Perfil_Regla).IdPerfilRegla.ToString());

                }

                _contratoCrearProyecto.reglas.DataBind();


            }

        }

        public List<Entidad> MostrarUsuarios()
        {

            Comando consultarusuarios = FabricaComandoProyecto.ObtenerComandoConsularDesarrolladores();
            consultarusuarios.Ejecutar();

            listadesarrolladores = consultarusuarios.ListaEntidad;

            return listadesarrolladores;

        }

        public List<Entidad> MostrarRoles()
        {

            Comando consultarroles = FabricaComandoProyecto.ObtenerRolesDisponibles();
            consultarroles.Ejecutar();
            listaroles = consultarroles.ListaEntidad;

            return listaroles;

        }


        public void AgregarFila(string valor)
        {

            listadesarrolladores = MostrarUsuarios();

            listaroles = MostrarRoles();



            int j = int.Parse(valor);
            Usuario usuario = new Usuario();
            Rol roles = new Rol();

            for (int i = 0; i < j; i++)
            {
                HtmlTableRow fila = new HtmlTableRow();
                HtmlTableCell celda1 = new HtmlTableCell();
                HtmlTableCell celda2 = new HtmlTableCell();
                HtmlTableCell celda3 = new HtmlTableCell();
                HtmlTableCell celda4 = new HtmlTableCell();
                DropDownList listaIntegrantes = new DropDownList();
                DropDownList listaRoles = new DropDownList();

                listaIntegrantes.ID = "listaIntegrantes" + i.ToString();
                listaRoles.ID = "listaRoles" + i.ToString();
                celda1.InnerText = "Nombre:";
                celda3.InnerText = "Rol:";
                listaIntegrantes.Items.Clear();


                foreach (Usuario usuario1 in listadesarrolladores)
                {
                    ListItem item = new ListItem();


                    item.Text = usuario1.Nombre;
                    item.Value = usuario1.IdUsuario.ToString();

                    listaIntegrantes.Items.Add(item);
                }

                listaRoles.Items.Clear();

                foreach (Rol rol in listaroles)
                {
                    ListItem item = new ListItem();
                    item.Text = rol.NombreRol;
                    item.Value = rol.IdRol.ToString();

                    listaRoles.Items.Add(item);
                }


                celda2.Controls.Add(listaIntegrantes);
                celda4.Controls.Add(listaRoles);

                fila.Cells.Add(celda1);
                fila.Cells.Add(celda2);
                fila.Cells.Add(celda3);
                fila.Cells.Add(celda4);
                _contratoCrearProyecto.tablaDatos.Rows.Insert(1, fila);
            }

        }

        public bool Validacion()
        {
            bool respuesta = false;
            String nombreProyecto = _contratoCrearProyecto.nombreProyecto.Text;
            String cliente = _contratoCrearProyecto.clientes.Text;
            String perfilmetricas = _contratoCrearProyecto.metricas.Text;
            String perfilreglas = _contratoCrearProyecto.reglas.Text;
            String dias = _contratoCrearProyecto.dias.Text;
            String ruta = _contratoCrearProyecto.ruta.Text;
            String numeroIntegrantes = _contratoCrearProyecto.numeroIntegrantes.Text;


            int num = int.Parse(numeroIntegrantes);



            //////////////////////
            /*       Proyecto proyecto = new Proyecto();
                   List<Usuario_Proyecto> integrantesProyecto = new List<Usuario_Proyecto>();
           
                   Tibet.Logica.LogicaProyecto logicaProyecto = new Tibet.Logica.LogicaProyecto();

                    int id = logicaProyecto.CrearProyecto(proyecto);

                    foreach (HtmlTableRow fila in _contratoCrearProyecto.tablaDatos.Rows)
                    {
                        String tipo = "System.Web.UI.WebControls.DropDownList";
                        String tipoCel1 = fila.Cells[1].Controls[0].GetType().ToString();
                        String tipoCel2 = fila.Cells[2].Controls[0].GetType().ToString();
                        if (tipo.Equals(tipoCel1) && tipo.Equals(tipoCel2))
                        {
                            Usuario_Proyecto integrante = new Usuario_Proyecto();

                            integrante.Fk_Proyecto_idProyecto = id;
                            integrante.Fk_Rol_idRol =
                                Convert.ToInt32(((DropDownList)fila.Cells[2].Controls[0]).SelectedItem.Value);
                            integrante.Fk_Usuario_idUsuario =
                                Convert.ToInt32(((DropDownList)fila.Cells[1].Controls[0]).SelectedItem.Value);
                            integrantesProyecto.Add(integrante);
                        }
                    }
                    logicaProyecto.AgregarIntegrantesProyecto(integrantesProyecto);
                  //  Response.Write("<script language=Javascript> alert('Proyecto creado con éxito'); </script>");
        
                   */


            DialogResult result;

            if ((perfilmetricas == "--Seleccione una opción-- ") || (perfilreglas == "--Seleccione una opción--"))
            {

                MessageBox.Show("Perfil de metrica o Perfil de regla invalido" + '\n' + "Seleccione una opcion");
                respuesta = false;
                return respuesta;

            }


            result = MessageBox.Show("Nombre del Proyecto: " + nombreProyecto + '\n' + "Nombre del Cliente: " + cliente +
           '\n' + "Perfil de metricas:" + perfilmetricas + '\n' + "Perfil de regla:" + perfilreglas + '\n' +
           "dias: " + dias + '\n' + "Ruta: " + ruta + '\n' + "Integrantes:  " + numeroIntegrantes, "Crear Proyecto", MessageBoxButtons.OKCancel);

            if (result == System.Windows.Forms.DialogResult.OK)
            {
                respuesta = true;

            }
            return respuesta;
        }


        public void InsertarProyecto(int posicionCliente, int posicionMetrica, int posicionRegla)
        {


            Entidad crearproyecto = FabricaEntidades.ObtenerProyecto();


            (crearproyecto as Proyecto).Nombre = _contratoCrearProyecto.nombreProyecto.Text;
            (crearproyecto as Proyecto).Estatus = "activo";
            (crearproyecto as Proyecto).Ruta = _contratoCrearProyecto.ruta.Text;
            (crearproyecto as Proyecto).Dias = int.Parse(_contratoCrearProyecto.dias.Text);
            (crearproyecto as Proyecto).IdCliente = ((listaclientes.ElementAt(posicionCliente) as Cliente)).Id;
            (crearproyecto as Proyecto).IdPerfilMetrica = ((listametricas.ElementAt(posicionMetrica) as PerfilMetrica)).IdPerfilMetrica;
            (crearproyecto as Proyecto).IdPerfilRegla = ((listareglas.ElementAt(posicionRegla) as Perfil_Regla)).IdPerfilRegla;

            // comando para insertar proyecto
            Comando comandoproyecto = FabricaComandoProyecto.ObtenerComandoInsertarProyecto();
            comandoproyecto.Entidad = crearproyecto;
            Boolean respuestaProyecto = false;
            (comandoproyecto as InsertarProyectoNuevo).Ejecutar();
            respuestaProyecto = comandoproyecto.Flag;

            // comando para obtener el id
            comandoproyecto = FabricaComandoProyecto.ObtenerUltimoProyecto();
            comandoproyecto.Entidad = crearproyecto;
            int id;
            (comandoproyecto as ConsultarUltimoProyecto).Ejecutar();
            id = comandoproyecto.Id;

            // comando para inserta en fecha

            Entidad fechaproyecto = FabricaEntidades.ObtenerFecha();
            Comando comandoFecha = FabricaComandoProyecto.ObtenerComandoInsertarFecha();

            comandoFecha.Id = id;
            (comandoFecha as InsertarFechaDeProyecto).Ejecutar();
            respuestaProyecto = comandoFecha.Flag;


            MessageBox.Show("El proyecto ha sido agregado con exito");
        }
        #endregion
    }
}

